负载均衡(Load Balancing)把海量请求、并发连接、数据传送分摊到后台多个单元并行处理,避免单点压力过大,同时提升整体可用性。本文系统讲解4 层与 7 层负载均衡的分类与结合架构,重点剖析 LVS 的四种实现模式(DR / NAT / TUNNEL / FULLNAT)、优化方向与 DPDK 改造思路,给出大规模入口负载均衡(SLB)的选型设计姿势。
按 OSI 网络模型覆盖范围划分:
| 类型 | 工作层次 | 能力 | 典型实现 |
|---|---|---|---|
| 4 层负载均衡 | 传输层 | TCP 连接层转发、会话保持,性能好、应用范围广 | LVS |
| 7 层负载均衡 | 应用层 | 针对特定协议(HTTP/HTTPS),URL 转发、session 处理、认证控制 | Nginx、HAProxy |
4 层偏向底层转发,性能更好,上层应用协议都可基于它转发;7 层针对具体协议,支持场景更丰富。大门户网站通常不二选一,而是结合两者优势整体设计高可用架构。
「4 层保性能与可用性 + 7 层做应用能力」的分层组合:4 层在最前面做 TCP 层转发分流并保障 7 层服务高可用;7 层(Nginx + Lua)承担 URL 处理、session、认证控制等应用能力;Nginx 最终把请求转发到真实 HTTP 后端服务单元。
上亿级访问量下,进一步在核心网络设备用 OSPF + ECMP 把数据包更底层打散到多个 LVS 集群节点,并配合 DPDK、NUMA、软中断绑定、flow director 逐项消除瓶颈。
文字说明:最前面部署两台 LVS(Master/Slave)做 HA 高可用的 4 层负载均衡,负责 TCP 连接层转发;4 层在前端做一次分流,同时保障后端 7 层负载均衡服务本身的高可用;7 层(Nginx + Lua)实现应用层能力(URL 地址处理、session 处理、基于用户连接信息的判断、认证、控制);Nginx 最终把请求转发到真实 HTTP 后端服务单元。
文字说明:四种模式各有优劣。DR(Direct Routing,直接路由)修改目的 MAC 地址二层转发,性能好,但需把 VIP 下放到后台节点且要求 LVS 与后端在同一二层网络;NAT 修改目的 IP,应用服务器无需特殊配置但要把后端网关改为 LVS 设备 IP;TUNNEL 在原有数据包上再封装一层、可跨网络部署,但封包解包损耗性能,需特殊内核或额外组件,使用较少;FULLNAT 结合 SNAT + DNAT 改写,无需后端依赖 LVS 网关,但修改数据包内容有性能损耗。
OSPF(Open Shortest Path First,开放最短路径优先)是动态路由协议,ECMP(Equal-Cost Multi-Path,等价多路径)实现多路径转发。在网络核心设备上配置这两个协议:ECMP 把用户请求数据包打散到各个 LVS 集群节点,在更底层实现负载分发,减少单个 LVS 的压力;OSPF 在单个 LVS 故障时动态剔除。这套模式近年应用广泛。
| 问题 | 方案 |
|---|---|
| 中断、内核处理效率 | DPDK:绕过内核的高性能数据包处理基础库 |
| 跨内存调用 | NUMA:控制进程对 CPU 与本地内存的访问 |
| 网卡亲和性 | CPU 与网卡软中断绑定,核心与队列一对一 |
| session 表锁 | 网卡 flow director 特性,按策略把数据包送到指定队列 |
DPDK(Data Plane Development Kit,数据平面开发套件)是英特尔开发的高性能网络处理基础库,专注数据包高性能处理。若缺乏研发投入,可直接使用基于 DPDK + LVS 的开源负载均衡软件,如爱奇艺开源的 DPVS(4 层,https://github.com/iqiyi/dpvs);7 层方面有支持 Nginx + DPDK 的开源项目 ansyun/dpdk-11-Nginx基础概述,但 Nginx 官方版本默认不支持 DPDK。
docs/运维/04-Nginx/。